define (["dojo/_base/lang"
				],function( lang ) {

	// module:
	//		cbtree/stores/util/filter
	// summary:

	var filter = {};

	filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/ ignoreCase) {
		//	summary:
		//		Helper function to convert a simple pattern to a regular expression for matching.
		//	description:
		//		Returns a regular expression object that conforms to the defined conversion
		//		rules. If the pattern string is enclosed in brackets the string without the
		//		outer brackets is treated as a regular expression, no convertion takes place.
		//
		//		For example:
		//			ca*   -> /^ca.*$/
		//			*ca*  -> /^.*ca.*$/
		//			*c\*a*  -> /^.*c\*a.*$/
		//			*c\*a?*  -> /^.*c\*a..*$/
		//			and so on.
		//
		//	pattern: string
		//		A simple matching pattern to convert that follows basic rules:
		//			* Means match anything, so ca* means match anything starting with ca
		//			? Means match single character.  So, b?b will match to bob and bab, and so on.
		//      	\ is an escape character.  So for example, \* means do not treat * as a match, but literal character *.
		//				To use a \ as a character in the string, it must be escaped.  So in the pattern it should be
		//				represented by \\ to be treated as an ordinary \ character instead of an escape.
		//
		//	ignoreCase:
		//		An optional flag to indicate if the pattern matching should be treated as case-sensitive or not when comparing
		//		By default, it is assumed case sensitive.

		if( pattern.charAt(0) == "(" && pattern.charAt(pattern.length-1) == ")") {
			var rxp = pattern.substr(1, pattern.length-2);
		} else {
			var rxp = "^";
			var c = null;
			for(var i = 0; i < pattern.length; i++){
				c = pattern.charAt(i);
				switch(c){
					case '\\':
						rxp += c;
						i++;
						rxp += pattern.charAt(i);
						break;
					case '*':
						rxp += ".*"; break;
					case '?':
						rxp += "."; break;
					case '$':
					case '^':
					case '/':
					case '+':
					case '.':
					case '|':
					case '(':
					case ')':
					case '{':
					case '}':
					case '[':
					case ']':
						rxp += "\\"; //fallthrough
					default:
						rxp += c;
				}
			}
			rxp += "$";
		}
		if(ignoreCase){
			return new RegExp(rxp,"mi"); //RegExp
		}else{
			return new RegExp(rxp,"m"); //RegExp
		}
	}
	return filter;
});
